package com.wn.demo01;

import java.util.concurrent.*;

/**
 * @author yellow Docter
 * @date 2024-09-05
 * @desc 蜗牛创想：www.woniuxy.com
 */
public class Demo01 {

    public static void main(String[] args) {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                3,            //核心线程数
                6,                       //最大线程数
                2,
                TimeUnit.MINUTES,
                new LinkedBlockingDeque<Runnable>(3), //缓冲区的大小
                Executors.defaultThreadFactory(),             //线程工厂
                new ThreadPoolExecutor.CallerRunsPolicy()     //拒绝策略
        );

        //核心线程数是3： 3个线程  意味  阻塞队列中没有内容
//        for (int i = 0; i < 3; i++) {
//            threadPoolExecutor.execute(()->{
//                System.out.println("currentThread = " + Thread.currentThread().getName());
//            });
//        }

        //核心线程数是3： 5个线程  意味  阻塞队列中2个线程  一段时间后 有2个线程会执行2个任务
//        for (int i = 0; i < 5; i++) {
//            threadPoolExecutor.execute(()->{
//                System.out.println("currentThread = " + Thread.currentThread().getName());
//            });
//        }

        //核心线程数是3： 队列是3  最大线程是 6
        //8 个线程  核心满了  队列满了  最大线程数 会进行工作
        //最大核心线程数  有2个进行了工作
        for (int i = 0; i < 8; i++) {
            threadPoolExecutor.execute(()->{
                System.out.println("currentThread = " + Thread.currentThread().getName());
            });
        }

        //核心线程数是3： 队列是3  最大线程是 6
        //10 个线程  核心满了  队列满了  最大线程数也满了
        //会执行拒绝策略  CallerRunsPolicy(谁给你任务 你把这个任务给谁)
//        for (int i = 0; i < 10; i++) {
//            threadPoolExecutor.execute(()->{
//                System.out.println("currentThread = " + Thread.currentThread().getName());
//            });
//        }

    }

}
